package com.raul.biblioteca.servlets;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.orm.PersistentException;
import org.orm.PersistentTransaction;

import com.raul.biblioteca.servlets.vo.VORecursos;

/**
 * Servlet implementation class RecursosServlet
 */
@WebServlet("/recursos/adminRecursos.servlet")
public class RecursosServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public RecursosServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String accion = request.getParameter("accion");
		System.out.println("Accion : "+accion);
		List<VORecursos> lista = (List<VORecursos>)request.getSession().getAttribute("listaRecurso");
		VORecursos recursos = new VORecursos();
		recursos.setTitulo(request.getParameter("titulo"));
		recursos.setAutor(request.getParameter("autor"));
		recursos.setMateria(request.getParameter("materia"));
		recursos.setIsbn(request.getParameter("isbn"));
		if(accion.equals("guardar")) {
			lista.add(recursos);
			PersistentTransaction t;
			try {
				t = orm.BibliotecaPersistentManager.instance().getSession().beginTransaction();
				try {
				orm.Recurso lormRecurso = orm.RecursoDAO.createRecurso();
				// Initialize the properties of the persistent object here
				lormRecurso.setTitulo(recursos.getTitulo());
				lormRecurso.setAutor(recursos.getAutor());
				lormRecurso.setMateria(recursos.getMateria());
				lormRecurso.setIsbn(recursos.getIsbn());
				System.out.println("Ingreso Exitoso");
				orm.RecursoDAO.save(lormRecurso);
				t.commit();
				}
				catch (Exception e) {
				t.rollback();
				}
				} catch (PersistentException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				}
		} else if(accion.equals("actualizar")) {
			for(VORecursos obj: lista) {
				if(obj.getTitulo().equals(recursos.getTitulo())) {
					obj.setAutor(recursos.getAutor());
					obj.setMateria(recursos.getMateria());
					obj.setIsbn(recursos.getIsbn());
				}
			}
			PersistentTransaction t;
			try {
				t = orm.BibliotecaPersistentManager.instance().getSession().beginTransaction();
				try {
					orm.Recurso lormRecurso = orm.RecursoDAO.loadRecursoByQuery("titulo='"+recursos.getTitulo()+"'", null);
					System.out.println("Borrado Exitoso");
					orm.RecursoDAO.save(lormRecurso);
					if(lormRecurso!=null){
						lormRecurso.setAutor(recursos.getAutor());
						lormRecurso.setMateria(recursos.getMateria());
						lormRecurso.setIsbn(recursos.getIsbn());
						orm.RecursoDAO.save(lormRecurso);
						t.commit();
					}
				}
				catch (Exception e) {
				t.rollback();
				}
				} catch (PersistentException e1) {
				// TODO Auto-generated catch block.
				e1.printStackTrace();
				}
			
		} else if(accion.equals("borrar")) {
			for(VORecursos obj: lista) {
				if(obj.getTitulo().equals(recursos.getTitulo())) {
					lista.remove(obj);
					break;
				}
				
			}
			PersistentTransaction t;
			try {
				t = orm.BibliotecaPersistentManager.instance().getSession().beginTransaction();
				try {
					orm.Recurso lormRecurso = orm.RecursoDAO.loadRecursoByQuery("titulo='"+recursos.getTitulo()+"'", null);
					System.out.println("Borrado Exitoso");
					orm.RecursoDAO.delete(lormRecurso);
				t.commit();
				}
				catch (Exception e) {
				t.rollback();
				}
				} catch (PersistentException e1) {
				// TODO Auto-generated catch block.
				e1.printStackTrace();
				}
            
   }
		response.sendRedirect("recursos.jsp");
	}
}
